package com.example.factoryModel.abstractClass;

import org.springframework.beans.factory.InitializingBean;

import java.util.HashMap;
import java.util.Map;

/**
 * 抽象方法实现工厂模式
 * 抽象动物类
 * 具体类继承动物类，有eat，call行为
 */
public abstract class AbstractAnimal implements InitializingBean {

    public static Map<String, AbstractAnimal> MAPS = new HashMap<>();

    /**
     * 吃
     */
    public abstract void eat();

    /**
     * 叫
     */
    public abstract void call();

    /**
     * 获取动物名称
     *
     * @return
     */
    abstract String getAnimalName();


    @Override
    public void afterPropertiesSet() throws Exception {
        synchronized (this) {
            MAPS.put(getAnimalName(), this);
        }
    }
}
